﻿using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceModel;
using Sinacor.Infra.Service.Security.Services;
using Sinacor.Servico.Bovespa.Cliente.Service.ServiceImplementation.Translator;
using Sinacor.Servico.Bovespa.Cliente.Service.DataContract.Response;

namespace Sinacor.Servico.Bovespa.Cliente.Service.ServiceImplementation
{
    /// <summary>
    /// Service Implementation Class - DicionarioErroExportacaoComitente
    /// </summary>
    [SinacorServiceBehavior]
    public class DicionarioErroExportacaoComitente : ServiceContract.IDicionarioErroExportacaoComitente
    {
        #region Variáveis Privadas

        private BusinessLogic.DicionarioErroExportacaoComitente _dicionarioErroExportacaoComitente;

        #endregion

        #region Construtor

        /// <summary>
        /// Construtor da classe DicionarioErroExportacaoComitente
        /// </summary>
        public DicionarioErroExportacaoComitente()
        {
            _dicionarioErroExportacaoComitente = new BusinessLogic.DicionarioErroExportacaoComitente();
        }

        #endregion

        #region IDicionarioErroExportacaoComitente Members

        /// <summary>
        /// Método usado para Alteração de Erro através de um único registro
        /// </summary>
        /// <param name="request"></param>
        public void AlterarErroExportacaoComitente(DataContract.Request.ErroExportacaoComitenteRequest request)
        {
            Translator.DataContractToBusinessEntity.DicionarioErroExportacaoComitente toBusinessEntity = new Translator.DataContractToBusinessEntity.DicionarioErroExportacaoComitente();

            _dicionarioErroExportacaoComitente.AlterarErroExportacaoComitente(toBusinessEntity.ToErroExportacaoComitente(request));
        }

        /// <summary>
        /// Método usado para Alteração de Erros através de uma lista de registros.
        /// </summary>
        /// <param name="request"></param>
        public void AlterarErrosExportacoesComitentes(List<DataContract.Request.ErroExportacaoComitenteRequest> request)
        {
            Translator.DataContractToBusinessEntity.DicionarioErroExportacaoComitente toBusinessEntity = new Translator.DataContractToBusinessEntity.DicionarioErroExportacaoComitente();

            _dicionarioErroExportacaoComitente.AlterarErrosExportacoesComitentes(toBusinessEntity.ToErroExportacaoComitente(request));
        }

        /// <summary>
        /// Método usado para Consulta de Erros
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public List<DataContract.Response.ErroExportacaoComitenteResponse> ConsultarErrosExportacoesComitentes(DataContract.Request.FiltroErroExportacaoComitenteRequest request)
        {
            Translator.DataContractToBusinessEntity.DicionarioErroExportacaoComitente toBusinessEntity = new Translator.DataContractToBusinessEntity.DicionarioErroExportacaoComitente();
            Translator.BusinessEntityToDataContract.DicionarioErroExportacaoComitente toDataContract = new Translator.BusinessEntityToDataContract.DicionarioErroExportacaoComitente();

            return toDataContract.ToErroExportacaoComitenteResponse(_dicionarioErroExportacaoComitente.ConsultarErrosExportacoesComitentes(toBusinessEntity.ToFiltroErroExportacaoComitente(request)));
        }

        /// <summary>
        /// Método usado para excluir um único registro.
        /// </summary>
        /// <param name="request"></param>
        public void ExcluirErroExportacaoComitente(DataContract.Request.FiltroErroExportacaoComitenteChaveRequest request)
        {
            Translator.DataContractToBusinessEntity.DicionarioErroExportacaoComitente toBusinessEntity = new Translator.DataContractToBusinessEntity.DicionarioErroExportacaoComitente();

            _dicionarioErroExportacaoComitente.ExcluirErroExportacaoComitente(toBusinessEntity.ToFiltroErroExportacaoComitenteChave(request));
        }

        /// <summary>
        /// Método usado para excluir uma lista de registros.
        /// </summary>
        /// <param name="request"></param>
        public void ExcluirErrosExportacoesComitentes(List<DataContract.Request.FiltroErroExportacaoComitenteChaveRequest> request)
        {
            Translator.DataContractToBusinessEntity.DicionarioErroExportacaoComitente toBusinessEntity = new Translator.DataContractToBusinessEntity.DicionarioErroExportacaoComitente();

            _dicionarioErroExportacaoComitente.ExcluirErrosExportacoesComitentes(toBusinessEntity.ToFiltroErroExportacaoComitenteChave(request));
        }

        /// <summary>
        /// Método usado para Executar as Transações de Inclusão, Alteração e Exclusão
        /// </summary>
        /// <param name="listaExclusao"></param>
        /// <param name="listaInclusao"></param>
        /// <param name="listaAlteracao"></param>
        public void ExecutarTransacoes(List<DataContract.Request.FiltroErroExportacaoComitenteChaveRequest> listaExclusao, List<DataContract.Request.ErroExportacaoComitenteRequest> listaInclusao, List<DataContract.Request.ErroExportacaoComitenteRequest> listaAlteracao)
        {
            Translator.DataContractToBusinessEntity.DicionarioErroExportacaoComitente toBusinessEntity = new Translator.DataContractToBusinessEntity.DicionarioErroExportacaoComitente();

            _dicionarioErroExportacaoComitente.ExecutarTransacoes(toBusinessEntity.ToFiltroErroExportacaoComitenteChave(listaExclusao),
                toBusinessEntity.ToErroExportacaoComitente(listaInclusao),
                toBusinessEntity.ToErroExportacaoComitente(listaAlteracao));
        }

        /// <summary>
        /// Método usado para incluir um único registro.
        /// </summary>
        /// <param name="request"></param>
        public void IncluirErroExportacaoComitente(DataContract.Request.ErroExportacaoComitenteRequest request)
        {
            Translator.DataContractToBusinessEntity.DicionarioErroExportacaoComitente toBusinessEntity = new Translator.DataContractToBusinessEntity.DicionarioErroExportacaoComitente();

            _dicionarioErroExportacaoComitente.IncluirErroExportacaoComitente(toBusinessEntity.ToErroExportacaoComitente(request));
        }

        /// <summary>
        /// Método usado para incluir uma lista de registros.
        /// </summary>
        /// <param name="requestList"></param>
        public void IncluirErrosExportacoesComitentes(List<DataContract.Request.ErroExportacaoComitenteRequest> requestList)
        {
            Translator.DataContractToBusinessEntity.DicionarioErroExportacaoComitente toBusinessEntity = new Translator.DataContractToBusinessEntity.DicionarioErroExportacaoComitente();

            _dicionarioErroExportacaoComitente.IncluirErrosExportacoesComitentes(toBusinessEntity.ToErroExportacaoComitente(requestList));
        }

        /// <summary>
        /// Método usado para Obter um Erro de Exportação de Comitente.
        /// </summary>
        /// <param name="request"></param>
        /// <returns></returns>
        public DataContract.Response.ErroExportacaoComitenteResponse ObterErroExportacaoComitente(DataContract.Request.FiltroErroExportacaoComitenteChaveRequest request)
        {
            Translator.DataContractToBusinessEntity.DicionarioErroExportacaoComitente toBusinessEntity = new Translator.DataContractToBusinessEntity.DicionarioErroExportacaoComitente();
            Translator.BusinessEntityToDataContract.DicionarioErroExportacaoComitente toDataContract = new Translator.BusinessEntityToDataContract.DicionarioErroExportacaoComitente();

            return toDataContract.ToErroExportacaoComitenteResponse(_dicionarioErroExportacaoComitente.ObterErroExportacaoComitente(toBusinessEntity.ToFiltroErroExportacaoComitenteChave(request)));
        }

        #endregion
    }
}
